package newsSystem.Admin;

import newsSystem.dao.UserInfoJDBC;
import newsSystem.news.NewsInfo;
import newsSystem.user.UserInfo;
import newsSystem.user.UserManager;

import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import static newsSystem.dao.UserInfoJDBC.deleteUserFromDatabase;

public class AdminPageThreeJPane {
    private static JTable table1;//报刊信息面板
//    static List<OrderInfo> orderList;
       static List<UserInfo>[] UserList;

    // 添加一个方法用于清空表格内容
    public static void clearTable() {
        System.out.println("清空列表数据");
        // 遍历数组，确保每个元素不为 null
        for (int i = 0; i < UserList.length; i++) {
            if (UserList[i] != null) {
                UserList[i].clear(); // 清空列表
            }
        }
    }
    public static JPanel createPage() throws Exception {
        DefaultTableModel tableModel = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int row, int column) {
                // 设置所有单元格不可编辑
                return false;
            }
        };
//        调用UserJDBC方法
        UserInfoJDBC.UserJDBC();
         UserList = new List[]{UserManager.getUserList()};
        String[] columnNames = {"用户账号", "用户密码", "真实姓名", "用户性别", "身份证号", "联系电话", "联系地址"};

        tableModel.setColumnIdentifiers(columnNames);
        // 创建表格
//        table1.setModel(null);
        table1 = new JTable(tableModel);
//        table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置选择模式
        // 设置表头的字体大小
        JTableHeader header = table1.getTableHeader();
        Font headerFont = new Font("幼圆", Font.BOLD, 18); // 设置表头字体
        header.setFont(headerFont);
// 设置表格的字体
        Font tableFont = new Font("黑体", Font.PLAIN, 16); // 定义表格字体样式
        table1.setFont(tableFont);

// 设置表格的行高
        table1.setRowHeight(30); // 设置每行的高度为30像素
        // 将报刊列表数据添加到表格中
        for (UserInfo user : UserList[0]) {
            Object[] rowData = {user.getUserID(), user.getUserPWD(), user.getUserName(), user.getUserSex(), user.getIDCard(), user.getPhone(), user.getAddress()};
            tableModel.addRow(rowData);
        }

        // 添加鼠标点击事件监听器
        table1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                // 获取被选中的行索引
                int rowIndex = table1.getSelectedRow();
                System.out.println("Selected Row Index: " + rowIndex);
                String orderno = null;
                if (rowIndex != -1) { // 如果有行被选中
                    // 从原始数据列表中获取对应的 OrderInfo 对象
                    UserInfo selectedOrder = UserList[0].get(rowIndex);
                    // 进行操作，比如输出订单编号
                    orderno = selectedOrder.getUserID();
                    System.out.println("选中用户账号：" + selectedOrder.getUserID());
                }

            }
        });

        JPanel page = new JPanel();
        page.setBounds(0, 0, 900, 450);
        page.setLayout(null); // 不推荐使用 null 布局，但在这种情况下似乎你在尝试自定义组件位置
        page.setBorder(new LineBorder(Color.black));
//        page.setBorder(new LineBorder(Color.blue)); // 这一行实际上取消了上一行设置的边框，user
//操纵框区域
        JPanel optionPane = new JPanel();
        optionPane.setBounds(0, 0, 900, 90);
        optionPane.setLayout(new BorderLayout()); // 使用边界布局

// 创建增加用户按钮并添加动作监听器
        JButton addUserButton = new JButton("增加用户");
        // 创建刷新表格数据的回调方法
        Runnable refreshTableCallback = new Runnable() {
            @Override
            public void run() {
                tableModel.setRowCount(0);
                UserList[0].clear();
                try {
                    UserInfoJDBC.UserJDBC();
                    UserList[0] = UserManager.getUserList();
                    for (UserInfo user : UserList[0]) {
                        Object[] rowData = {user.getUserID(), user.getUserPWD(), user.getUserName(), user.getUserSex(), user.getIDCard(), user.getPhone(), user.getAddress()};
                        tableModel.addRow(rowData);
                    }
                } catch (Exception ex) {
                    throw new RuntimeException(ex);
                }
            }
        };

        // 添加用户按钮的监听器
        addUserButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("这是添加用户操作");
                AddUserWindow addUserWindow = new AddUserWindow(refreshTableCallback);
                addUserWindow.setVisible(true);
            }
        });
//        optionPane.add(addUserButton);

// 创建删除用户按钮并添加动作监听器
        JButton deleteUserButton = new JButton("删除用户");

        deleteUserButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取被选中的行索引
                int selectedRowIndex = table1.getSelectedRow();
                System.out.println(selectedRowIndex);
                if (selectedRowIndex != -1) { // 判断是否有行被选中
                    // 根据行索引获取对应的数据实体
                    UserInfo selectedUser = UserList[0].get(selectedRowIndex);

                    // 调用删除方法，传入当前选中用户的 UserID
                    deleteUserFromDatabase(selectedUser.getUserID());
                    // 显示删除成功的提示框
                    JOptionPane.showMessageDialog(null, "用户删除成功！", "提示", JOptionPane.INFORMATION_MESSAGE);
                    // 更新表格数据，这里可以清空表格并重新加载数据库中的数据
                    tableModel.setRowCount(0);
                    UserList[0].clear();
                    try {
                        UserInfoJDBC.UserJDBC();
                    } catch (Exception ex) {
                        throw new RuntimeException(ex);
                    }
                    UserList[0] = UserManager.getUserList();
                    for (UserInfo user : UserList[0]) {
                        Object[] rowData = {user.getUserID(), user.getUserPWD(), user.getUserName(), user.getUserSex(), user.getIDCard(), user.getPhone(), user.getAddress()};
                        tableModel.addRow(rowData);
                    }
                } else {
                    System.out.println("请先选择要删除的用户");
                }
            }
        });

        JButton EditUserButton = new JButton("编辑用户");

//        optionPane.add(deleteUserButton);
        // 将两个按钮添加到 BorderLayout.CENTER 区域实现居中
        JPanel centerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        centerPanel.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("用户信息管理"),
                BorderFactory.createEmptyBorder(5, 5, 5, 5)));


//查询用户信息框
        JTextField queryTextField = new JTextField(10);
        JButton  queryButton = new JButton("查询用户");
        queryButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String queryText = queryTextField.getText(); // 获取文本框中的内容
                System.out.println(queryText);
                try {
//                    int queryUserID = Integer.parseInt(queryText); // 将文本内容转换为整数
// 获取用户输入的 UserID
                    String queryUserID = queryTextField.getText();
                    // 在 UserList 中查找相应的用户信息
                    boolean userFound = false;
                    for (UserInfo user : UserList[0]) {
                        if (user.getUserID().equals(queryUserID)) {
                            // 清空表格模型中的数据
                            tableModel.setRowCount(0);

                            // 将找到的用户信息添加到表格模型中
                            Object[] rowData = {user.getUserID(), user.getUserPWD(), user.getUserName(), user.getUserSex(), user.getIDCard(), user.getPhone(), user.getAddress()};
                            tableModel.addRow(rowData);

                            userFound = true;
                            break;
                        }
                    }
                    // 如果未找到匹配的newsID，则显示提示消息
//                    JOptionPane.showMessageDialog(null, "查找成功", "提示", JOptionPane.WARNING_MESSAGE);
                } catch (NumberFormatException ex) {
                    // 处理无法转换为整数的情况
                    JOptionPane.showMessageDialog(null, "查找成功", "提示", JOptionPane.ERROR_MESSAGE);
                }
            }
        });

// 一键查询所用用户
        JButton AllUserButton = new JButton("所有用户");
        AllUserButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 清空表格模型中的数据
                tableModel.setRowCount(0);
                // 在这里编写编辑报刊的逻辑
                for (UserInfo user : UserList[0]) {
                    Object[] rowData = {user.getUserID(), user.getUserPWD(), user.getUserName(), user.getUserSex(), user.getIDCard(), user.getPhone(), user.getAddress()};
                    tableModel.addRow(rowData);
                }
            }
        });



//       添加操作按钮
        centerPanel.add(addUserButton);
        centerPanel.add(deleteUserButton);
        centerPanel.add(EditUserButton);
        centerPanel.add(queryTextField);
        centerPanel.add(queryButton);
        centerPanel.add(AllUserButton);

        optionPane.add(centerPanel, BorderLayout.SOUTH); // 将包含按钮的面板添加到 CENTER 区域


        page.add(optionPane); // 将 OptionPane 添加到 page 上

//表格区域
        JScrollPane scrollPane = new JScrollPane(table1);
        scrollPane.setBorder(null);
        scrollPane.setBounds(0, 90, 900, 360);
        page.add(scrollPane); // 将 JScrollPane 添加到 page 上
        return page;
    }
    }
